package com.formulas.component.extension;

/**
 * BizScenario（业务场景）= bizId(业务) + useCase（用例） + scenario（场景）, 它可以唯一地标识用户场景.
 * @author yiwannuofulasi
 * @date 2023/6/2 11:26
 */
public class BizScenario {

    /**默认业务标记**/
    public final static String DEFAULT_BIZ_ID = "#defaultBizId#";
    /**默认用例标记**/
    public final static String DEFAULT_USE_CASE = "#defaultUseCase#";
    /**默认场景标记**/
    public final static String DEFAULT_SCENARIO = "#defaultScenario#";
    /**点分隔符**/
    private final static String DOT_SEPARATOR = ".";

    /**bizId用于标识业务，例如“天猫”，如果只有一个业务，则可以为空**/
    private String bizId = DEFAULT_BIZ_ID;

    /**useCase用于识别用例，例如“提交订单”，不能为空**/
    private String useCase = DEFAULT_USE_CASE;

    /**场景用于标识一个用例，如“贵宾”、“正常”，不能为空**/
    private String scenario = DEFAULT_SCENARIO;

    /**
     * 获得业务场景唯一标识BizScenario
     * 对于上述情况，BizScenario将是“天猫.提交订单.贵宾”，
     * 使用这段代码，我们可以提供除“天猫.提交订单.正常”之外的扩展处理场景。
     * @return String
     */
    public String getUniqueIdentity(){
        return bizId + DOT_SEPARATOR + useCase + DOT_SEPARATOR + scenario;
    }

    /**
     * 构建业务场景 BizScenario
     * @param bizId 业务标记
     * @param useCase 用例标记
     * @param scenario 场景标记
     * @return BizScenario
     */
    public static BizScenario valueOf(String bizId, String useCase, String scenario){
        BizScenario bizScenario = new BizScenario();
        bizScenario.bizId = bizId;
        bizScenario.useCase = useCase;
        bizScenario.scenario = scenario;
        return bizScenario;
    }

    /**
     * 构建业务场景 BizScenario (场景标记默认-DEFAULT_SCENARIO)
     * @param bizId 业务标记
     * @param useCase 用例标记
     * @return BizScenario
     */
    public static BizScenario valueOf(String bizId, String useCase){
        return BizScenario.valueOf(bizId, useCase, DEFAULT_SCENARIO);
    }

    /**
     * 构建业务场景 BizScenario (用例标记默认-DEFAULT_USE_CASE，场景标记默认-DEFAULT_SCENARIO)
     * @param bizId 业务标记
     * @return BizScenario
     */
    public static BizScenario valueOf(String bizId){
        return BizScenario.valueOf(bizId, DEFAULT_USE_CASE, DEFAULT_SCENARIO);
    }

    /**
     * 构建默认业务场景 BizScenario
     * @return BizScenario
     */
    public static BizScenario newDefault(){
        return BizScenario.valueOf(DEFAULT_BIZ_ID, DEFAULT_USE_CASE, DEFAULT_SCENARIO);
    }

    /**
     * 使用默认场景获取身份
     * @return String
     */
    public String getIdentityWithDefaultScenario(){
        return bizId + DOT_SEPARATOR + useCase + DOT_SEPARATOR + DEFAULT_SCENARIO;
    }

    /**
     * 使用默认用例、场景获取身份
     * @return String
     */
    public String getIdentityWithDefaultUseCase(){
        return bizId + DOT_SEPARATOR + DEFAULT_USE_CASE + DOT_SEPARATOR + DEFAULT_SCENARIO;
    }
}
